- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个使用 Java 中的 Selenium 来抓取网站的程序(我会共享该网站,但您需要一个帐户,所以我认为这不会有帮助)。我正在使用 chrome 驱动程序。我一直在试图弄清楚如何单击页面上的“立即运行”按钮(下面的 html 代码片段)。 Selenium 提示按钮不可点击,即使我明确等待按钮可点击也是如此。
这是我的代码:
public String getReport() {
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='QTF_AdminTab']/a")));
driver.get("theurl");
wait.until(ExpectedConditions.urlToBe("theurl"));
String oldtab = driver.getWindowHandle();
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("/html/body/div[1]/div[2]/div/div[1]/div/div/div[1]/div[4]/button[@class='_widget-form-run mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary']/span")));
driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/div[1]/div/div/div[1]/div[4]/button[@class='_widget-form-run mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary']/span")).click();
//... I don't think the rest is relevant since the above line (line 114 in the log) is the one causing the trouble
}
我的 xpath 上升到 因为日志语句说了一些想要被点击的东西。如果我从 xpath 中删除 span
,则没有任何变化。
这是日志:
Starting ChromeDriver 83.0.4103.39 (ccbf011cb2d2b19b506d844400483861342c20cd-refs/branch-heads/4103@{#416}) on port 41202
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
Jul 10, 2020 5:36:00 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
Exception in thread "main" org.openqa.selenium.ElementClickInterceptedException: element click intercepted: Element <span class="mdl-button__ripple-container">...</span> is not
clickable at point (796, 183). Other element would receive the click: <span class="mdl-button__ripple-container">...</span>
(Session info: chrome=83.0.4103.116)
Build info: version: '4.0.0-alpha-6', revision: '5f43a29cfc'
System info: host: '______', ip: '_______', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '11.0.7'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, browserName: chrome, browserVersion: 83.0.4103.116, chrome: {chromedriverVersion: 83.0.4103.39 (ccbf011cb2d2b..., userDataDir: C:\Users\______\AppData\Loca...}, goog:chromeOptions: {debuggerAddress: localhost:56109}, javascriptEnabled: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: WINDOWS, platformName: WINDOWS, proxy: Proxy(), setWindowRect: true, strictFileInteractability: false, timeouts: {implicit: 0, pageLoad: 300000, script: 30000}, unhandledPromptBehavior: dismiss and notify, webauthn:virtualAuthenticators: true}
Session ID: e2b8ff1a23cd9b0932c00af2b1ffd2b5
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490)
at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:196)
at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:129)
at org.openqa.selenium.remote.codec.w3c.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:53)
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:160)
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:582)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:316)
at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:85)
at reliant.abusescanner.PCCclient.getReport(PCCclient.java:114)
at reliant.abusescanner.Main.main(Main.java:72)
这是按钮的 html 代码:
<div class="flex-actions">
<button class="_widget-form-run mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary" data-upgraded=",MaterialButton,MaterialRipple">Run now<span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
<!--<button class="_component-save mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" style="display:none">Save</button>-->
<button class="_component-saveAs mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" style="" data-upgraded=",MaterialButton,MaterialRipple">Save As<span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
<!--<button class="_component-delete mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" disabled>Delete</button>-->
<button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary configMenuBtn" id="demo-menu-lower-right" data-upgraded=",MaterialButton,MaterialRipple">
More Actions <i class="material-icons configMenuList">arrow_drop_down</i>
<span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
<div class="mdl-menu__container is-upgraded"><div class="mdl-menu__outline mdl-menu--bottom-right"></div><ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events" for="demo-menu-lower-right" data-upgraded=",MaterialMenu,MaterialRipple">
<li class="mdl-menu__item _component-save mdl-js-ripple-effect" tabindex="-1" data-upgraded=",MaterialRipple" style="display: none;">Save<span class="mdl-menu__item-ripple-container"><span class="mdl-ripple"></span></span></li>
<li disabled="disabled" class="mdl-menu__item _component-delete mdl-js-ripple-effect" tabindex="-1" data-upgraded=",MaterialRipple">Delete<span class="mdl-menu__item-ripple-container"><span class="mdl-ripple"></span></span></li>
</ul></div>
</div>
这是一段更大的 html 代码(包括上面的代码),以防它能帮助您回答问题:
<div class="mdl-body">
<div class="onboarding-report-section">
Reduce the time it takes to setup and run a report.
<a href="#" class="_onboarding-report-setup-details">Click here to learn more</a>
</div>
<h1>24 Hour Summary Report</h1>
<div class="_form"><div class="_widget-root mdl-form">
<div class="_widget-section mdl-form-section">
<div class="_widget-fields"><div class="_form-field-save_config mdl-field saveConfigurationComponent">
<div class="mdl-field-input">
<div class="mdl-form-label flex-label">My saved settings</div>
<div class="_publishOverlayPlaceholder"></div>
<div class="_component-dropdown flex-dropdown"><span class="_catalyst-flyoutList-select dropdown-anchor-input " tabindex="0" style="width:300px;">
<span class="dropdown-legend"></span>
<span class="dropdown-label">
Unsaved
</span>
<i class="material-icons dropdown-arrow">arrow_drop_down</i>
</span></div>
<div class="flex-actions">
<button class="_widget-form-run mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary" data-upgraded=",MaterialButton,MaterialRipple">Run now<span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
<!--<button class="_component-save mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" style="display:none">Save</button>-->
<button class="_component-saveAs mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" style="" data-upgraded=",MaterialButton,MaterialRipple">Save As<span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
<!--<button class="_component-delete mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary" disabled>Delete</button>-->
<button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--secondary configMenuBtn" id="demo-menu-lower-right" data-upgraded=",MaterialButton,MaterialRipple">
More Actions <i class="material-icons configMenuList">arrow_drop_down</i>
<span class="mdl-button__ripple-container"><span class="mdl-ripple"></span></span></button>
<div class="mdl-menu__container is-upgraded"><div class="mdl-menu__outline mdl-menu--bottom-right"></div><ul class="mdl-menu mdl-menu--bottom-right mdl-js-menu mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events" for="demo-menu-lower-right" data-upgraded=",MaterialMenu,MaterialRipple">
<li class="mdl-menu__item _component-save mdl-js-ripple-effect" tabindex="-1" data-upgraded=",MaterialRipple" style="display: none;">Save<span class="mdl-menu__item-ripple-container"><span class="mdl-ripple"></span></span></li>
<li disabled="disabled" class="mdl-menu__item _component-delete mdl-js-ripple-effect" tabindex="-1" data-upgraded=",MaterialRipple">Delete<span class="mdl-menu__item-ripple-container"><span class="mdl-ripple"></span></span></li>
</ul></div>
</div>
</div>
<div class="_setting-instructions"></div>
<div class="_component-field-error mdl-field-errors"></div>
</div></div>
</div>
<div class="_widget-section mdl-form-section">
<div class="_widget-fields"><div class="_form-field-dateEnding mdl-field">
<div class="mdl-field-input datePickerComponent unSavedConfigField">
<div class="mdl-field-header">
<div class="mdl-form-label">Date (Ending)<span class="unSavedConfiglabelDisplay">(Date (Ending) won't be saved in the setting)</span></div>
</div>
<span class="_toggleRange" style="display: none;">From </span>
<input class="_fromDate catalyst-datepicker" style="margin-right:25px;">
<span class="_toggleRange" style="display: none;">
To <input class="_toDate catalyst-datepicker">
<input type="hidden" value="2020-07-10" name="end_date"></span>
<input type="hidden" value="2020-07-10" name="start_date"></div>
<div class="_component-field-error mdl-field-errors"></div>
</div><div class="_form-field-unit mdl-field">
<div class="mdl-field-input genericComponent">
<div class="mdl-field-header">
<div class="mdl-form-label">Unit</div>
</div>
<div class="_dropdown"><span class="_catalyst-flyoutList-select dropdown-anchor-input " tabindex="0" style="width:315px;">
<span class="dropdown-legend"></span>
<span class="dropdown-label">
All
</span>
<i class="material-icons dropdown-arrow">arrow_drop_down</i>
</span></div>
</div>
<div class="_component-field-error mdl-field-errors"></div>
</div><div class="_form-field-floor mdl-field">
<div class="mdl-field-input genericComponent">
<div class="mdl-field-header">
<div class="mdl-form-label">Floor</div>
</div>
<div class="_dropdown"><span class="_catalyst-flyoutList-select dropdown-anchor-input " tabindex="0" style="width:315px;">
<span class="dropdown-legend"></span>
<span class="dropdown-label">
All
</span>
<i class="material-icons dropdown-arrow">arrow_drop_down</i>
</span></div>
</div>
<div class="_component-field-error mdl-field-errors"></div>
</div><div class="_form-field-timeEnding mdl-field">
<div class="mdl-field-input hourMinuteTimeComponent">
<div class="mdl-field-header">
<div class="mdl-form-label">Ending Time</div>
</div>
<div class="_nestedContent">
<div class="_nestedHours"><span class="_catalyst-flyoutList-select dropdown-anchor-input " tabindex="0" style="width:50px;">
<span class="dropdown-legend"></span>
<span class="dropdown-label">
13
</span>
<i class="material-icons dropdown-arrow">arrow_drop_down</i>
</span></div>
<div class="_nestedMinutes"><span class="_catalyst-flyoutList-select dropdown-anchor-input " tabindex="0" style="width:50px;">
<span class="dropdown-legend"></span>
<span class="dropdown-label">
00
</span>
<i class="material-icons dropdown-arrow">arrow_drop_down</i>
</span></div>
</div>
</div>
<div class="_component-field-error mdl-field-errors"></div>
</div><div class="_form-field-summaryInterval mdl-field">
<div class="catalyst-field-input">
<div class="mdl-field-header">
<div class="mdl-form-label">Summary Interval</div>
</div>
<label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded" for="formObj_summaryInterval_8" data-upgraded=",MaterialRadio,MaterialRipple">
<input type="radio" class="mdl-radio__button" id="formObj_summaryInterval_8" name="summaryInterval" value="8">
<span class="mdl-radio__label">Last 8 hours</span>
<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
<label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded is-checked" for="formObj_summaryInterval_24" data-upgraded=",MaterialRadio,MaterialRipple">
<input type="radio" class="mdl-radio__button" id="formObj_summaryInterval_24" name="summaryInterval" value="24">
<span class="mdl-radio__label">Last 24 hours</span>
<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
<label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded" for="formObj_summaryInterval_72" data-upgraded=",MaterialRadio,MaterialRipple">
<input type="radio" class="mdl-radio__button" id="formObj_summaryInterval_72" name="summaryInterval" value="72">
<span class="mdl-radio__label">Last 72 hours</span>
<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
</div>
<div class="_component-field-error mdl-field-errors"></div>
</div><div class="_form-field-includeDraftProgressNotes mdl-field">
<div class="catalyst-field-input">
<div class="mdl-field-header">
<div class="mdl-form-label">Include draft progress notes on report</div>
</div>
<label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded is-checked" for="formObj_includeDraftProgressNotes_true" data-upgraded=",MaterialRadio,MaterialRipple">
<input type="radio" class="mdl-radio__button" id="formObj_includeDraftProgressNotes_true" name="includeDraftProgressNotes" value="true">
<span class="mdl-radio__label">Yes</span>
<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
<label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded" for="formObj_includeDraftProgressNotes_false" data-upgraded=",MaterialRadio,MaterialRipple">
<input type="radio" class="mdl-radio__button" id="formObj_includeDraftProgressNotes_false" name="includeDraftProgressNotes" value="false">
<span class="mdl-radio__label">No</span>
<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
</div>
<div class="_component-field-error mdl-field-errors"></div>
</div><div class="_form-field-sortBy mdl-field">
<div class="catalyst-field-input">
<div class="mdl-field-header">
<div class="mdl-form-label">Sort Residents By</div>
</div>
<label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded" for="formObj_sortBy_-1" data-upgraded=",MaterialRadio,MaterialRipple">
<input type="radio" class="mdl-radio__button" id="formObj_sortBy_-1" name="sortBy" value="-1">
<span class="mdl-radio__label">Last Name</span>
<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
<label class="_mdl-radio mdl-radio mdl-js-radio mdl-js-ripple-effect mdl-js-ripple-effect--ignore-events is-upgraded is-checked" for="formObj_sortBy_1" data-upgraded=",MaterialRadio,MaterialRipple">
<input type="radio" class="mdl-radio__button" id="formObj_sortBy_1" name="sortBy" value="1">
<span class="mdl-radio__label">Location</span>
<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span><span class="mdl-radio__ripple-container mdl-js-ripple-effect mdl-ripple--center" data-upgraded=",MaterialRipple"><span class="mdl-ripple"></span></span></label>
</div>
<div class="_component-field-error mdl-field-errors"></div>
</div></div>
</div>
</div></div>
<div class="_meadcoSection"></div>
</div>
请告诉我是否可以做些什么来使这个问题更容易回答。提前致谢!
编辑:我审查了一些个人信息(带有“____”)。希望一切都好
最佳答案
如果您查看 elementToBeClickable(..)
方法,您会发现“可点击”意味着“可见且已启用”。
您可以看到的消息表示某些元素与您的目标元素重叠。更改您的 XPath 将无济于事。
这种情况经常发生,因为应用程序布局设计为以特定屏幕分辨率显示,但测试以较小的分辨率运行,因此元素相互交叉。
P.S. - wait.until(..)
返回条件定位的元素,因此无需再次查找它。你可以这样做:
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("/blah blah"));
关于java - Selenium 等到可点击但仍然不可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62844150/
Selenium IDE、Selenium RC 和 Selenium WebDriver 有什么区别;我们可以在什么样的项目中使用它们?任何建议将不胜感激。 最佳答案 Selenium IDE 是一
我的 Selenium 服务器在远程服务器上运行。我从我的本地 PC 启动我的 Selenium 脚本,它从网站获取数据。 例如,我的 Selenium 脚本执行这段 JS 代码: JSON.stri
Selenium 中“//div[.//a[text()='SELENIUM']]”和“//div[//a[text()='SELENIUM']]”有什么区别xpath。 有人可以澄清我在 xpath
我正在创建自动冒烟测试。我读到在单元测试中使用多个断言不是一个好的做法,这条规则是否也适用于使用 selenium 的 webdriver 测试? 在我的冒烟测试中,有时我会使用 20 多个断言来验证
我在一个变量中存储了一个值,在另一个变量中存储了第二个值,现在我想将这两个数字相加。我无法做到这一点,我尝试过下面的代码,但它不起作用 store 6 w sto
Selenium 中的回车键和回车键有什么区别? This related SO answer并且提供的链接说明它们是不同的。我还注意到,在使用 Firefox 24.2 时,回车键将发送一个 HTM
以下是我遇到异常的详细信息: 当我使用以下命令启动节点时,出现如下错误: F:\SeleniumGrid\Jars>java -jar selenium-server-standalone-3.0.0
我是 的新手 Selenium 我对版本号有点困惑。 Selenium 2.0 2011年发布。我刚刚下载了 Selenium IDE Firefox 扩展,版本为 1.7.2 .是否还有 IDE 的
我正在使用 Selenium 运行Codeception 2。我可以看到 Selenium 打开了浏览器并运行了测试。然后,我从代码接收中得到一个错误,即存在失败的断言。 我知道有一个HTML文件可以
Closed. This question needs to be more focused。它当前不接受答案。 想要改善这个问题吗?更新问题,使它仅关注editing this post的一个问题。
我想关闭弹出窗口(已知的窗口名称),然后返回到原始窗口。 我该怎么办? 如果我无法获得窗口中关闭按钮的常量。那么有没有达到目标的一般行为? 最佳答案 你有没有尝试过: selenium.Close()
我正在用webdriver做一个测试机器人。我有一个场景,它单击一个按钮,打开一个新窗口,并且它通过特定的xpath搜索元素,但是有时没有这样的元素,因为可以将其禁用,并且出现此错误:org.open
我是第一次使用Selenium,对这些选项不知所措。我在Firefox中使用IDE。 当我的页面加载时,它随后通过JSONP请求获取值,并在其中填充选择中的选项。 我如何让Selenium等待选择中的
我开始使用nightwatch.js编写e2e测试,我注意到我想在目标浏览器的控制台(开发人员工具)中手动检查一些错误。但总是在我打开开发者控制台时,浏览器会自动关闭它。这是selenium还是nig
我正在尝试使用以下方式刮除Glassdoor的评论: https://github.com/MatthewChatham/glassdoor-review-scraper 但是我得到了错误并且不知道如
背景 我设置了一个Selenium Grid项目,以在两种不同的浏览器Chrome和Firefox中执行测试。我正在使用Gradle执行测试。该测试将成功执行两次,一次按预期在Chrome中执行,一次
当测试失败时,运行 selenium 测试的浏览器将关闭。这在尝试调试时没有帮助。我知道我可以在失败时选择屏幕截图,但如果没有整个上下文,这并没有帮助。在浏览器仍然可用的情况下,我可以回击并检查发生了
使用 Selenium Web 驱动程序而不是 Selenium RC 启动新的测试框架是个好主意吗?对于 Selenium Web 驱动程序,并非所有 Selenium 方法都已实现。那么使用 Se
我使用 selenium 页面对象模型来定义所有页面元素。我对元素命名所遵循的命名约定不太相信,并且感觉太长了。请对此提出建议。 @FindBy(xpath = "//tbody[@id='tabvi
有一个带有按钮的 html 页面,我的 Selenium 测试正在测试,当单击按钮时,会执行一个操作。 问题是,看起来点击发生在 javascript 执行之前 - 在处理程序绑定(bind)到页面之
我是一名优秀的程序员,十分优秀!