硒|附上已经打开的浏览器(IE),以webdriver的
我在一个网站中,我需要使用用户需要批准同一个然后用户B来执行一些操作的自动化工作。硒|附上已经打开的浏览器(IE),以webdriver的
默认情况下,Web应用程序从Windows登录本身获取凭据,因为没有登录页面。
所以我做的是,我自动从用户A的所有行动。现在要执行从用户B的行动,我创建了一个.vbs
实用程序,我打电话给我的java代码,此实用程序打开一个Web浏览器并与用户B登录到应用程序(我用vbs为此shell脚本)。现在我有两个网页浏览器,一个是由webdriver打开的(我用用户A执行了一些操作),另一个是由vbs实用程序打开的(我需要在这个浏览器上执行一些操作),因为我的第二个浏览器不是由Webdriver打开我正在寻找一种方法将它附加到webdriver,以便我可以对它执行一些操作&批准由用户A创建的请求。
附加信息: 我需要在IE中执行此操作,因为这是客户端要求。 我使用java的硒。
从阅读你的问题,我相信你正在解决你的问题不正确。由于我无法确定您在浏览器中处理的是哪种身份验证,因此我想我可以向您展示一个表单和HTTP 401,它很可能涵盖一般场景。如果您需要其他示例,请以不同的方式进行身份验证,请告诉我们。
如果我误解了您的请求,并且您确实想要挂接到手动启动的浏览器实例(默认情况下未提供),您必须非常有创意。无论如何,这个问题的答案是here。
但是,据我的建议,我强烈建议您尽可能地去掉vb脚本/手动浏览器。如果您可以通过浏览器进行身份验证,则可以通过硒进行身份验证。下面是一些例子:
Note, this is a good guide on how to use the InternetExplorerDriver
方案1:使用HTML表单 的HTML代码示例:
<form>
<table id="credentials_table">
<tbody>
<tr>
<td class="credentials_table_label_cell"><label for="username" id="label_input_1">Username</label></td>
<td class="credentials_table_field_cell"><input class="credentials_input_text" value="" id="username" autocomplete="off" autocapitalize="off" type="text"></td>
</tr>
<tr>
<td class="credentials_table_label_cell"><label for="password" id="label_input_2">Password</label></td>
<td class="credentials_table_field_cell"><input class="credentials_input_password" value="" id="password" autocomplete="off" autocapitalize="off" type="password"></td>
</tr>
<tr id="submit_row">
<td class="credentials_table_field_cell"><input class="credentials_input_submit" value="Logon" type="submit"></td>
</tr>
</tbody></table>
</form>
样品Selenim代码以登录:
private WebDriver driverForA = new InternetExplorerDriver();
private WebDriver driverForB = new InternetExplorerDriver();
@After
public void after() {
driverForA.close();
driverForB.close();
}
@Test
public void testADoesThisAndBDoesThat() {
driverForA.get("http://my.login.url");
final WebElement usernameInput = driverForA.findElement(By.id("username"));
final WebElement passwordInput = driverForA.findElement(By.id("password"));
final WebElement submitButton = driverForA.findElement(By.xpath("//input[@type='submit' and @value='Logon']"));
// perform the login stuff
clearKeysAndSetValue(usernameInput, "Joe");
clearKeysAndSetValue(passwordInput, "superSecret");
submitButton.click();
// navigate to other pages and do things
driverForB.get("http://my.approval.page");
final WebElement approveButton = driverForB.findElement(By.id("approval_Button"));
approveButton.click();
}
private void clearKeysAndSetValue(final WebElement element, final String valueToSet) {
element.clear();
element.sendKeys(valueToSet);
}
private final WebDriver driverForA = new InternetExplorerDriver();
private final WebDriver driverForB = new InternetExplorerDriver();
@After
public void after() {
driverForA.close();
driverForB.close();
}
@Test
public void testADoesThisAndBDoesThatHttpBasic() {
// authenticate as a
WebDriverWait wait = new WebDriverWait(driverForA, 5);
Alert alert = wait.until(ExpectedConditions.alertIsPresent());
alert.authenticateUsing(new UserAndPassword("Joe", "superSecret"));
// navigate to other pages and do things
driverForB.get("http://my.approval.page");
final WebElement approveButton = driverForB.findElement(By.id("approval_Button"));
approveButton.click();
}
为什么不打开一个新的webdriver而是创建一个vbs? – Madhan