java - 使用 selenium 自动登录 Web 应用程序

标签 java selenium selenium-webdriver popup

我正在尝试使用 selenium (在 chrome 中)自动执行 Web 应用程序的登录过程。加载页面时,会出现一个弹出窗口,询问登录凭据。

我已经尝试过以下方法。

  1. url 中传递用户名密码 - 这样不行。
  2. 通过我们从 chrome 开发者工具获取的名称进行访问。 -- 弹出窗口部分没有名称。它是一个 .swf 组件,其中 'Allowscriptaccess' 属性设置为 'sameDomain'(我不知道这是否相关。)基本上,我所理解的弹出窗口是一个 .swf 组件。

有什么方法可以访问此窗口并在 selenium 中输入登录详细信息。提前致谢。

最佳答案

直接提交表单

您可能无法在 URL 中传递用户名/密码,因为服务器端实现期望 Content-Typeapplication/x-www- form-urlencodedmultipart/form-dataapplication/json

您可能需要使用类似以下内容,而不是使用https://mywebsite.com/login?username=myusername&password=mypassword:

Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: mywebsite.com
Connection: close
User-Agent: Some User Agent
Content-Length: xxx

username=myusername&password=mypassword

User-Agent header 通常是必要的,以免在服务器端被阻止(403 Forbidden)。

实际检查此问题的一种方法是使用 FirebugChrome 开发者工具来检查登录数据如何发送到服务器并模仿该行为。

在 HTML 表单中使用 Selenium

使用 Selenium,您还可以填写表格。

如果它在新窗口/选项卡/弹出窗口中打开,您可以选择正确的窗口。假设 driver 是您正在使用的 WebDriver。

ArrayList<String> tabs = new ArrayList<String>(driver.getWindowHandles());


for (String tab : tabs) {
    
    driver.switchTo().window(tab);

    // Either get it by its url
    if (driver.getCurrentUrl().equals("https://mywebsite.com/my-login") {
        // Do the login
    }

    // Detect based on HTML on the page
    if (driver.findElement(By.cssSelector(".my-form-class #my-form-id")).size() != 0) {
        // Do the login
    }
}

当 JavaScript 加载登录屏幕时,您可以等待该元素在 DOM 中变得可用。再次假设驱动程序是您正在使用的 WebDriver。

WebDriverWait wait = new WebDriverWait(driver, 15);
wait.until(ExpectedConditions.presenceOfElementLocated(By.cssSelector(".my-form-class #my-form-id")));

现在您可以实际填写表格:

driver.findElement(By.cssSelector(".my-form-class .username")).sendKeys("your-actual-username");
driver.findElement(By.cssSelector(".my-form-class .password")).sendKeys("your-actual-password");
driver.findElement(By.cssSelector(".my-form-class .submit-button")).click();

编写代码来验证登录是否成功。

与 Flash 交互

如果登录是实际的 Flash 对象,您可能被迫使用 Java Robot类(class)。从而执行一系列步骤:

  • 鼠标移动到用户名/电子邮件字段的位置
  • mousePress 单击表单字段
  • keyPress 填写您的用户名

重复输入密码并提交按钮。检查登录是否确实成功

此外,您还可以使用 conductor框架,它可以使 Selenium 测试变得更容易。

关于java - 使用 selenium 自动登录 Web 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40740388/

相关文章:

java - Activity 之间的变化不起作用

java - 如何使用selenium java向左和向右移动 slider

python - 我们如何导航到网页、抓取数据、移至下一页,然后再次执行此操作?

java - Appium 无法识别屏幕上的元素,即使它们是使用 initElements 初始化的

java - 检查线是否以点开头,然后将其删除

java - Lucene 中的多术语短语

python - 如何在使用 Selenium Python 之前定位伪元素::

python - Selenium 无法获取 Instagram 上的所有元素

java - WebDriver 打印错误的条件语句

java - 在 Java 中加载模型时,没有注册 OpKernel 来支持 Op 'PyFunc'