Selenium Webdriver C#,Chrome,图标隐藏元素并且不可点击[重复]
Posted
技术标签:
【中文标题】Selenium Webdriver C#,Chrome,图标隐藏元素并且不可点击[重复]【英文标题】:Selenium Webdriver C#, Chrome, the icon hides the element and it is not clickable [duplicate] 【发布时间】:2019-01-09 20:10:03 【问题描述】:更新:主要问题是元素图标隐藏了一个按钮并且无法点击。解决方案是使用 js.Executor 隐藏此图标。
我正在尝试使用 Selenium WebDriver 进行测试,它对我来说是新的,我有一个元素有问题,它不可点击,我尝试通过 linktext, 找到它类名,cssselector,不起作用。
我已经阅读了很多关于这个问题的文章 "Element is not clickable" ,但还没有找到适合我测试的解决方案。希望你能给我好的建议。
Chrome 版本 67.0.3396.99,64 位 Visual C# 2017 Webdriver 3.13.1.0 版
这是我的脚本:
namespace MK_edit
class Program
static void Main(string[] args)
IWebDriver driver = new ChromeDriver(@"C:\Users\alina\ProjectLibre");
driver.Url = "http://test.test.com"; //not real url, I cannot show it
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(60);
driver.Manage().Window.Maximize();
//close popup
driver.FindElement(By.CssSelector("div.whatsnew-content"));
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
driver.FindElement(By.CssSelector("button.btn.btn-success")).Click();
driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(60);
//edit part
var lab = driver.FindElement(By.CssSelector("span.glyphicon.glyphicon-edit"));
lab.Click();
元素信息:
<li class="allwaysVisible"><a href="#tab-old-edit" data-toggle="tab" title="Map_obj" data-i18n="[title]nav.edit"><span class="glyphicon glyphicon-edit"></span></a></li>
错误信息:
Element <span class=\"glyphicon glyphicon-edit\">
</span> is not clickable at point (312, 24).
Other element would receive the click: <div class=\"modal-backdrop fade\">
</div>\n
谢谢!
【问题讨论】:
【参考方案1】:在添加这些元素后,我的元素变得可见和可点击,请 tnx 寻求建议
//open edit
var lab = driver.FindElement(By.CssSelector("a[title=\"---\"]"));
var icon = driver.FindElement(By.CssSelector("span.glyphicon.glyphicon-edit"));
IjavascriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript("arguments[0].style='display: none;'", icon);
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 30));
wait.Until(ExpectedConditions.ElementToBeClickable(lab));
lab.Click();
【讨论】:
【参考方案2】:您可以将点击事件替换为动作类,
Actions builder = new Actions(driver);
builder.MoveToElement("Your target element").Click().Perform();
【讨论】:
【参考方案3】:请在找到 labosana
元素之前添加一些等待
代码:
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
wait.Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("span.glyphicon.glyphicon-edit")));
var labosana = driver.FindElement(By.CssSelector("span.glyphicon.glyphicon-edit"));
labosana.Click();
【讨论】:
这是错误的答案! @Rajagopalan:这可能是一个正确的答案。在这里,单击按钮后,会显示一些加载弹出窗口。因此,我们需要检查元素可见性,直到模式弹出窗口关闭。 这就是你出现的方式,你现在解释的内容从你的回答中更清楚了,但这仍然是完全错误的。在您的系统中执行并检查它,您就会知道问题所在。 @Rajagopalan:用户尚未分享要测试的 URL。我根据我的经验给出建议。如果是错误的答案,您需要给出有效的建议。 当元素被另一个元素覆盖时,Selenium 不会认为该元素是不可见的。它仍然可见。【参考方案4】:等到微调器/加载器消失,尝试在这样的方法中传递微调器元素“.modal-backdrop”...
public static void WaitForNotVisible(IWebElement element, IWebDriver driver)
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.Until(drv =>
try
if (element.Displayed)
return false;
return true;
catch
return true;
);
像这样……
var spinnerElement = driver.FindElement(By.CssSelector(".modal-backdrop"));
WaitForNotVisible(spinnerElement, driver);
labosana.Click();
【讨论】:
【参考方案5】:根据您分享的错误消息,<div class=\"modal-backdrop fade\">
会收到点击,而不是 <span class=\"glyphicon glyphicon-edit\">
。在div
元素悬停在您的元素之前,您无法与您的元素交互。意思是div
,如果是弹窗或者对话框,应该关闭。或者如果它是一个自动消失的元素,你必须等到这个元素不再可见。然后你可以点击你的元素。
我无法提供代码示例来解决您的问题,因为我没有网站链接。希望这会有所帮助。
【讨论】:
以上是关于Selenium Webdriver C#,Chrome,图标隐藏元素并且不可点击[重复]的主要内容,如果未能解决你的问题,请参考以下文章
c#爬虫-selenium检测webdriver封爬虫的解决方法
Selenium WebDriver - 如何使用 C# 设置页面加载超时
通过 Selenium WebDriver C# 获取 HTTP 状态码
在 C# 中使用 Selenium WebDriver 执行 JavaScript