在
本文关键字:Xpath selenium iframe | 更新日期: 2023-09-27 18:05:30
我试图通过部分类找到这个元素,HTML代码如下:
<a class="follow-button profile" href="https://twitter.com/123"
role="button" data-scribe="component:followbutton" title="Follow 123
on Twitter"><i class="ic-button-bird"></i>Follow</a>
我使用的方法如下:
var element = Driver.FindElement(By.XPath("//a[contains(@class, 'follow-button profile')]"));
你知道无法定位元素的原因是什么吗?
NoSuchElement
异常一般有以下原因之一:
-
您的元素在
<frame>
或<iframe>
内。检查你的HTML。- 如果是这种情况,您可以使用
SwitchTo().Frame()
-
Frame()
接受3个参数-
IWebElement
-
IWebElement frameElement = driver.FindElement(By.Tag("frame"));
-
driver.SwitchTo().Frame(frameElement);
-
-
<frame name="MyFrame">
或<iframe>
的名称-
driver.SwitchTo().Frame("MyFrame");
-
-
<frame>
或<iframe>
的索引,从0开始-
SwitchTo().Frame(0)
-
-
- 在
<frame>
上下文中完成后,您需要切换回正确的上下文中-
driver.SwitchTo().DefaultContent();
-
- 如果是这种情况,您可以使用
-
当Selenium认为您的页面已经完成加载后,您的元素正在加载
- 如果是这种情况,您可以使用
Wait
告诉Selenium暂停,直到元素完成在页面上的加载。
- 如果是这种情况,您可以使用
您要查找的元素中有多个类。在这种情况下使用xpath
的正确方法如下:
var element = Driver.FindElement(By.XPath("//a[contains(@class, 'follow-button ') and contains(@class, 'profile')]"));
也可以使用css
var element = Driver.FindElement(By.CssSelector(".follow-button.profile"));
可能是类值在运行时发生了变化。