如何通过Selenium和C#根据给定的HTML单击元素

时间:2018-07-07 11:53:28

标签: c# selenium selenium-webdriver xpath css-selectors

我想通过移动设备发送instagram货件。但是我需要单击一个按钮以发送新货。我尝试了有关按钮单击的所有操作,但没有进行管理。

public static void HoverMouseOverClicks(IWebElement element)
    {
        Actions action = new Actions(insta);
        action.MoveToElement(element);
        IJavaScriptExecutor executor = (IJavaScriptExecutor)insta;
        executor.ExecuteScript("arguments[0].scrollIntoView(true);arguments[0].click();", element);
    }

为您在上面看到的点击代码编码

HoverMouseOverClicks(insta.FindElement(By.XPath("//*[@id='react-root']/section/nav[2]/div/div/div[2]/div/div/div[3]/span")));

我尝试这样做,但仍然无法获得结果。

 insta.FindElement(By.XPath("//*[@id='react-root']/section/nav[2]/div/div/div[2]/div/div/div[3]/span")).Click();

此代码有时会单击,有时不会单击。

XPath路径永不更改。

相关HTML:

<div class="q02Nz _0TPg" role="menuitem"><span class="glyphsSpriteNew_post__outline__24__grey_9 Szr5J">Yeni Gönderi</span> <span class="glyphsSpriteNew_post__outline__24__grey_9 Szr5J">Yeni Gönderi</span></div>

我该怎么办?

1 个答案:

答案 0 :(得分:0)

根据您共享的HTML,点击带有 YeniGönderi的文本的元素,您需要诱使 WebDriverWait 使元素可点击,您可以使用以下解决方案:

new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div[@role='menuitem']//span[contains(@class, 'glyphsSpriteNew_post__') and contains(.,'Yeni Gönderi')]"))).Click();