簡體   English   中英

在黃瓜中運行測試時,為什么會收到NoSuchElementException

[英]Why Am I Getting a NoSuchElementException When Running Tests in Cucumber

最近幾天,我在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"}

我切換了操作方式,單擊了一個可以打開模式的按鈕,並允許我在其中使用文本字段。但是沒有看到該按鈕。

此錯誤消息...

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

...意味着沒有這樣的元素用的是發現定位戰略類名屬性為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"); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM