【问题标题】:Problem with button with IE driver and Xpath Selenium with Java带有 IE 驱动程序的按钮和带有 Java 的 Xpath Selenium 的问题
【发布时间】:2020-03-11 17:09:36
【问题描述】:

我有以下问题:

我在表单中有一个按钮(网页有一个登录名和密码文本框和一个按钮),这个按钮调用一个js函数,在登录名和密码验证后,调用主网页。 html 代码是这样的(此代码在表单调用“登录”和方法 = POST 内):

<INPUT class="btn btn-mini btn-primary" onclick=submitForm(); type=button value="Sign On">

在 Selenium 中,我尝试使用以下语句,但没有成功:

driver.findElement(By.xpath("//input[@type='button']")).click();
driver.findElement(By.cssSelector("input[type='button'][@value='Sign On']")).click();
driver.findElement(By.xpath("//input[@value='Sign On']")).click();

当我运行脚本时,登录名和密码文本已正确填写,但单击按钮不起作用。

你能帮我解决这个问题吗?

谢谢!

来自智利的贡萨洛

【问题讨论】:

  • 您能否提供您尝试脚本的网址?
  • driver.findElement(By.cssSelector("input[type='button'][@value='Sign On']")).click(); 肯定这不起作用,因为您在 css 中有 @value 而不是 value。请分享元素的 html,并确保 iframe 中不存在该元素。
  • 在输入用户名和密码之前是否隐藏了登录按钮?如果是这样,IE 浏览器有时无法识别以前隐藏的元素。解决此问题的一种方法是使 Waitforelement 可见并使用 Actions 类单击该元素。
  • 在按钮之前,我得到了这个: 。不得不说,这是私有代码,所以我不能把整个代码放在这里。
  • 这是表单的代码:

标签: java selenium button xpath click


【解决方案1】:

要单击您需要为element_to_be_clickable() 诱导WebDriverWait 的元素,您可以使用以下任一定位器策略

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.btn.btn-mini.btn-primary[value='Sign On'][onclick^='submitForm']"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@class='btn btn-mini btn-primary' and @value='Sign On'][starts-with(@onclick, 'submitForm')]"))).click();
    

【讨论】:

  • 让我看看这段代码,我会告诉你结果
  • 使用 cssSelector,我收到以下错误:线程“main”中的异常 org.openqa.selenium.TimeoutException:预期条件失败:等待元素可点击:By.cssSelector:input.btn btn -mini btn-primary[value='Sign On'][onclick^='submitForm'](尝试 20 秒,间隔 500 毫秒)在 org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait .java:113) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:283) atautomation_TI_CR.test_ti.main(test_ti.java:32)
  • 引起:org.openqa.selenium.NoSuchElementException:无法使用 By.cssSelector 定位元素:input.btn btn-mini btn-primary[value='Sign On'][onclick^='提交表单']
【解决方案2】:

我找到了解决方案,阅读了很多与此相关的问题。我正在使用 win 10 和 IE 11,所以 Selenium 对此有问题,因为需要 100% 的文本、应用程序和其他项目的大小。就我而言,我有 150% 的配置。解决这个问题,我再次运行脚本,它就可以工作了。

使用的代码是:

WebElement button = null;
List<WebElement> inputs = webDriver.findElements(By.tagName("input"));
for (WebElement input : inputs) {
    if (input.getAttribute("value").equals("Log In")) {
        button = input;
        break;
    }
}
if (button == null) {
    System.err.println("Cannot find button!");
} else {
    System.out.println("Clicking button now!");
    button.click();
}

在此之后,我检查另一个更有效的代码:

driver.findElement(By.cssSelector("input[type='button'][value='Sign On']")).click();

这也有效。

感谢大家的帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多