Selenium和Java的元素不可处理错误

时间:2019-03-13 08:47:03

标签: selenium-webdriver xpath webdriver webdriverwait xpath-1.0

<input type="submit" value="Add New Date of Commencement of Contract Details for INDoS No. : 09HL9630" onclick="method.value='loadFrom3A'" xpath="1">

这是inspect元素中的内容,这是我尝试过的内容,但是没有用。 Xpath不能工作,因为它以循环形式更改。请帮助

public void addnew_date() {

    driver.findElement(By.cssSelector("input[type='submit']").click();
    driver.manage().timeouts().pageLoadTimeout(40,TimeUnit.SECONDS);
    driver.manage().timeouts().implicitlyWait(40,TimeUnit.SECONDS);
}

3 个答案:

答案 0 :(得分:0)

请在xpaths下使用它。

Xpath的: 1. //input[@type='submit']
2. //input[contains(text(),'Add New Date of Commencement')]

public void addnew_date() {
    driver.findElement(By.xpath("//input[@type='submit']").click();
}

Implicitwait和Pageloadtimeout应该在测试开始时使用,即在创建webdriver对象即驱动程序之后。

类似:

System.setProperty("webdriver.chrome.driver",".\\drivers\\chromedriver.exe");
    WebDriver   driver = new ChromeDriver(options);
    driver.get("https://www.google.com");
    driver.manage().timeouts().pageLoadTimeout(40,TimeUnit.SECONDS);
    driver.manage().timeouts().implicitlyWait(40,TimeUnit.SECONDS);

答案 1 :(得分:0)

您需要将WebDriverWaitExpectedConditions一起归为elementToBeClickable(),并且可以使用以下Locator Strategy

  • xpath

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[starts-with(@value, 'Add New Date of Commencement of Contract Details') and contains(@onclick, 'loadFrom3A')]"))).click();
    

答案 2 :(得分:0)

有可能存在预期的元素,但无法单击或显示该元素,从而引发了所述异常。需要确定实际原因。尝试以下方式进行调试:

  • 请确保您只有一个带有定位符input[type='submit']的元素,并且可能还有一些其他其他带有提交类型的输入标签,并且它们可能是第一个且很难处理的。因此需要通过添加一些周围的元素或属性使其更加具体 例如//input[type='submit'][contains(@value,'Add New Date')]

  • 执行元素当前状态的检查,例如

    List<WebElement> button = driver.findElements(By.cssSelector("input[type='submit']");
    
    System.out.println(button.size()) // 1 means element present 0 means no element and other count mean number of element
    
    if(button.size()==1){ //  check element is present
         if(button.get(0).isDisplayed()){ // check element is visible
            System.out.println("element is present and displaying");
            button.get(0).submit();
         }else{
            System.out.println("element is present but not displaying");
          }
    else if (button.size()>1){
        System.out.println("there are multiple element with same locator");
    
    } else {
        System.out.println("element not present for the locator");
    }
    
  • 如果元素需要一些时间才能进行交互,请明智地使用硒等待条件

    1. 隐式等待示例:

      System.setProperty("webdriver.chrome.driver",".\\drivers\\chromedriver.exe");
      WebDriver driver = new ChromeDriver(options);
      driver.get("website_URL");
      driver.manage().timeouts().implicitlyWait(40,TimeUnit.SECONDS);
      
    2. ExplicitWait示例:

      WebElement button = driver.findElement(By.xpath("//input[type='submit'][contains(@value,'Add New Date')]"));
      WebDriverWait wait = new WebDriverWait(driver, 30);
      wait.until(ExpectedConditions.visibilityOf(button)).click();
      
  • 您可以尝试使用.submit()方法,因为该元素是提交类型,也可以使用JavascriptExecuter来执行点击

     JavascriptExecutor js = (JavascriptExecutor)driver;                   
     js.executeScript("arguments[0].click();", button);