这是我要点击的按钮。我想通过使用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 )
答案 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()