我目前正在尝试使用带有C#的selenium单击网页上的元素。我需要根据具有文本'Test App'的子元素单击Div元素。
以下是该对象的HTML代码段;
<div class="application_items">
<a href="www.google.com" target="_self">
<div class="homePageItems">
<div class="small" style="display: block;">
<div class="AppLabel">Test App</div>
</div>
<div class="big" style="display: none;">
<div class="AppLabel">Test App</div>
<div class="underTitle"></div>
</div>
</div>
</a></div>
这是我的C#代码,尝试访问应用程序名称'Test App'的第一次出现;
Element(By.XPath("//div[@class='small']/*[text()[contains(., 'Test App')]]"));
当这个运行时,我收到一个错误;
OpenQA.Selenium.ElementNotInteractableException: 'Element <div class="AppLabel"> could not be scrolled into view'
我认为错误可能是因为该程序正在访问“App Test”的第二次出现,所以我尝试使用以下代码将“big”类设置为div(display:block;),但是似乎没有帮助;
IWebElement elem = Driver.FindElement(By.XPath("//div[@class='small']/div[text()[contains(., 'Test App')]]"));
String js = "arguments[0].style.height='auto'; arguments[0].style.display='block';";
((IJavaScriptExecutor)Driver).ExecuteScript(js, elem);
我很抱歉,如果之前有过与此相似的内容,我花了一段时间浏览类似的主题,但没找到我需要的东西。如果有人能指出我正确的方向,那将非常感激。
答案 0 :(得分:1)
您可以获取所有元素,将其过滤为仅显示的元素,然后单击第一个(或其他)元素。
{{1}}
您还可能需要添加等待以确保页面的一部分已加载。
答案 1 :(得分:0)
你可以通过使用classname来狡猾地使用,更正代码因为我不太了解C sharp
driver.FindElement(By.ClassName("AppLabel")).Click();
您也可以使用xpath
driver.FindElement(By.XPath(“//div[@class='small']/div[text()='Test App'])).Click();
答案 2 :(得分:0)
根据您提供的HTML,点击应用的第一个外观,文字为测试应用,您可以使用以下任意一行代码:
CssSelector
:
Element(By.CssSelector("div.homePageItems > div.small > div.AppLabel"));
XPath
:
Element(By.XPath("//div[@class='homePageItems']/div[@class='small']/div[@class='AppLabel' and contains(., 'Test App')]"));
答案 3 :(得分:0)
b=map (f2 . read . f1 ) a
我正在使用它对我来说是完美的