在黄瓜中运行测试时,为什么会收到NoSuchElementException

时间:2018-12-11 20:55:37

标签: java selenium xpath css-selectors cucumber

最近几天我一直在黄瓜中编写测试。到目前为止,我编写的测试工作正常,可以单击对象,发送键了。没问题。

我现在已经到达这些页面元素,无论我使用什么选择器都找不到。我尝试使用等待,但是即使它们在页面上清晰可见,也无法访问。

这同时发生在我要单击的表行元素和我想向其发送键的文本输入中。我将后者包括在下面。

 <input type="text" name="EMPLOYEE_label" value="" class="" 
 onkeypress="return dtPk(event,this);" onkeydown="return dtKd(event,this);" 
 onchange="dltCh(this,'EMPLOYEE__test');" size="30" wbvalid="true" 
isresolving="false">

这是我目前正在使用的代码。

webdriver = new ChromeDriver();
WebDriverWait wait = new WebDriverWait(webdriver, 30);  
wait.until(ExpectedConditions.visibilityOfElementLocated(By
    .name("EMPLOYEE_label")));

JOptionPane.showMessageDialog(null, "WebDriver =" + webdriver);
WebElement empIDTextInput  = webdriver.findElement(By.name("EMPLOYEE_label"));
empIDTextInput.sendKeys("Bennett");
Thread.sleep(1000);
gtaProxyPage.clickFindButton().click();
Thread.sleep(1000);

gtaProxyPage.checkAssociateBox().click();
gtaProxyPage.loadTimesheet().click();
Thread.sleep(2000);

编辑: 我将代码更改为此。它更像我的开始

     Thread.sleep(30000); 
     //this calls for the input element by className.
    gtaProxyPage.UserEntersNumberUnderTimesheet().click();
    gtaProxyPage.clickFindButton().click();
    gtaProxyPage.checkAssociateBox().click();
    gtaProxyPage.loadTimesheet().click();

这是我现在得到的错误

 org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"class name","selector":"input.triggerButton"}

我切换了操作方式,单击了一个打开模式的按钮,并允许我在其中使用文本字段。但是该按钮没有显示。

1 个答案:

答案 0 :(得分:0)

此错误消息...

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"class name","selector":"input.triggerButton"}

...表示使用具有{em> classname 属性的Locator Strategy作为 input.triggerButton 找不到这样的元素

不管在问题中发布相关的 HTML 时进行的所有更改和处理方式,都是将字符序列发送到元素:

<input type="text" name="EMPLOYEE_label" value="" class="" onkeypress="return dtPk(event,this);" onkeydown="return dtKd(event,this);" onchange="dltCh(this,'EMPLOYEE__test');" size="30" wbvalid="true" isresolving="false">

由于该元素是动态元素,因此必须诱使 WebDriverWait 使元素可点击,并且可以使用以下任一解决方案:

  • cssSelector

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input[name='EMPLOYEE_label'][onchange*='EMPLOYEE__test']"))).sendKeys("Bennett");
    
  • xpath

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@name='EMPLOYEE_label' and contains(@onchange, 'EMPLOYEE__test')]"))).sendKeys("Bennett");