2016-07-28 119 views
-1

我在一个网站中,我需要使用用户需要批准同一个然后用户B来执行一些操作的自动化工作。硒|附上已经打开的浏览器(IE),以webdriver的

默认情况下,Web应用程序从Windows登录本身获取凭据,因为没有登录页面。

所以我做的是,我自动从用户A的所有行动。现在要执行从用户B的行动,我创建了一个.vbs实用程序,我打电话给我的java代码,此实用程序打开一个Web浏览器并与用户B登录到应用程序(我用vbs为此shell脚本)。现在我有两个网页浏览器,一个是由webdriver打开的(我用用户A执行了一些操作),另一个是由vbs实用程序打开的(我需要在这个浏览器上执行一些操作),因为我的第二个浏览器不是由Webdriver打开我正在寻找一种方法将它附加到webdriver,以便我可以对它执行一些操作&批准由用户A创建的请求。

附加信息: 我需要在IE中执行此操作,因为这是客户端要求。 我使用java的硒。

+1

为什么不打开一个新的webdriver而是创建一个vbs? – Madhan

回答

0

从阅读你的问题,我相信你正在解决你的问题不正确。由于我无法确定您在浏览器中处理的是哪种身份验证,因此我想我可以向您展示一个表单和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); 
} 

Scenario 2: Using HTTP 401

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(); 
} 
相关问题