如何使用Java

时间:2016-05-04 05:36:08

标签: java selenium cucumber

这是我要点击的按钮。我想通过使用Java在selenium web驱动程序中编写自动化脚本来检查此按钮。

以下是该按钮的代码。

<label class="toggle" style="font-size:13px">
<input type="checkbox" name="checkbox-IsEFR" id="checkbox-IsEFR">
<i data-swchon-text="Yes" data-swchoff-text="No"></i>Is Enable for Rules
</label>

请帮助我,因为我不熟悉自动化脚本编写。我为复选框编写了脚本,但它无法正常工作。以下,我附上了我的脚本和生成的错误。

@When("^clicks on enable for rules$")
    public void clicks_on_enable_for_rules() throws Throwable {
        driver.findElement(By.name("checkbox-IsEFR")).click();
    }

我收到的错误。

  

org.openqa.selenium.ElementNotVisibleException:元素不是   目前可见,因此可能无法与命令持续时间进行交互   或超时:209毫秒构建信息:版本:&#39; 2.53.0&#39;,   修订版:&#39; 35ae25b&#39;,时间:&#39; 2016-03-15 17:00:58&#39;系统信息:主持人:   &#39; DELL_I5&#39;,ip:&#39; 192.168.1.33&#39;,os.name:&#39; Windows 10&#39;,os.arch:   &#39; amd64&#39;,os.version:&#39; 10.0&#39;,java.version:&#39; 1.8.0_77&#39;司机信息:   org.openqa.selenium.firefox.FirefoxDriver功能   [{applicationCacheEnabled = true,rotate = false,handlesAlerts = true,   databaseEnabled = true,version = 46.0,platform = WINDOWS,   nativeEvents = false,acceptSslCerts = true,webStorageEnabled = true,   locationContextEnabled = true,browserName = firefox,   takesScreenshot = true,javascriptEnabled = true,   cssSelectorsEnabled = true}]会话ID:   03695ef8-bd24-49d6-b8a1-6687e3d0375c at   sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)     at sun.reflect.NativeConstructorAccessorImpl.newInstance(未知   来源)at   sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知   来自java.lang.reflect.Constructor.newInstance(未知   来源)at   org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)     在   org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)     在   org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)     在   org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:327)     在   org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:85)     在   mCollector.features.StepDefinitions_mCollector.clicks_on_enable_for_rules(StepDefinitions_mCollector.java:61)     在✽。点击启用规则(C:/ Users / Admin / workspace / MStudio    - eBilling / src / mCollector / features / mCollector.feature:12)引起:org.openqa.selenium.ElementNotVisibleException:元素不是   目前可见,因此可能无法与构建信息进行交互:   版本:&#39; 2.53.0&#39;,修订版:&#39; 35ae25b&#39;,时间:&#39; 2016-03-15 17:00:58&#39;
  系统信息:主机:&#39; DELL_I5&#39;,ip:&#39; 192.168.1.33&#39;,os.name:&#39; Windows   10&#39;,os.arch:&#39; amd64&#39;,os.version:&#39; 10.0&#39;,java.version:&#39; 1.8.0_77&#39;
  驱动程序信息:driver.version:未知.fxdriver.preconditions.visible(file:/// C:/Users/Admin/AppData/Local/Temp/anonymous546390466745105063webdriver-profile/extensions/fxdriver@googlecode.com/components/command- processor.js:10092)     at .DelayedCommand.prototype.checkPreconditions_(file:/// C:/Users/Admin/AppData/Local/Temp/anonymous546390466745105063webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12644)     at .DelayedCommand.prototype.executeInternal_ / h(file:/// C:/Users/Admin/AppData/Local/Temp/anonymous546390466745105063webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12661)     at .DelayedCommand.prototype.executeInternal_(file:/// C:/Users/Admin/AppData/Local/Temp/anonymous546390466745105063webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12666)     at .DelayedCommand.prototype.execute /&lt;(file:/// C:/Users/Admin/AppData/Local/Temp/anonymous546390466745105063webdriver-profile/extensions/fxdriver@googlecode.com/components/command-processor.js:12608 )

3 个答案:

答案 0 :(得分:1)

您可以使用显式等待和ExpectedConditions等待复选框可见

WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("checkbox-IsEFR"))).click();

在点击它之前,这将等待最多10秒钟才能看到该元素。

答案 1 :(得分:1)

错误是:&#34; ElementNotVisibleException:元素当前不可见,因此可能无法与...进行交互。&#34;

发生此错误的原因可能有多种,但最可能的原因是:

页面上未加载元素,您的代码正在尝试单击它。要处理这个问题,您可以在代码中放置wait语句。可以通过置入隐式等待driver.manage().timeouts().implicitlyWait(5000L, TimeUnit.SECONDS);来强制执行全局等待,也可以在执行单击活动之前尝试使用显式等待语句。

尝试解决方案,我认为它可以解决您的问题。

答案 2 :(得分:0)

您可以使用以下内容在Selenium中搜索xpath:

driver.find_element_by_xpath(".//*[contains(text(), 'Is Enable for Rules')]").click()