如何使用PhantomJS和Selenium单击离子按钮

时间:2019-01-26 11:25:50

标签: c# selenium xpath phantomjs webdriverwait

我们有一个第三方供应商,需要向我们提供实时数据,但没有任何数据接口。解决方案是将网站数据镜像到我们的系统。他们的网站是用Ionic建立的。

我已经创建了镜像数据功能,目前的问题是实时数据位于另一个页面上,但URL不仅会更改页面的来源。我现在无法获取实时数据,因为必须单击主页上的“实时数据”按钮。

我使用PhantomJS尝试以编程方式单击该按钮,但是由于某些原因,它不起作用。在Google主页上测试了该功能,并且可以正常工作。

有人知道我做错了什么吗?我已经尝试过className,tagName和dom中的大多数元素,但还是没有运气。

以下是网站的源代码以及我的PhantomJS代码。

PS该网站是一个本地设备界面,我正在使用保存的HTML代码进行测试。

网站按钮来源

<button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-home item-icon" aria-label="home"></ion-icon><div class="item-inner"><div class="input-wrapper"><!----><ion-label class="label label-md">

                Home
            </ion-label></div><!----></div><div class="button-effect"></div></button><button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-list item-icon" aria-label="list"></ion-icon><div class="item-inner"><div class="input-wrapper"><!----><ion-label class="label label-md">

                Live Data
            </ion-label></div><!----></div><div class="button-effect"></div></button><button class="item item-block item-md" ion-item="" menuclose=""><ion-icon color="primary" item-left="" role="img" class="icon icon-md icon-md-primary ion-md-analytics item-icon" aria-label="analytics"></ion-icon><div class="item-inner"><div class="input-wrapper">

C#PhantomJS代码:

_driver.Manage().Window.Size = new Size(1000, 800);
_driver.Navigate().GoToUrl(url);
Thread.Sleep(3000);
//get the source of the page
Console.Write(_driver.PageSource);
//fully navigate the dom
var pathElements = _driver.FindElementsByTagName("button");
pathElements[1].Click();

2 个答案:

答案 0 :(得分:0)

要单击文本为 Live Data 的所需元素,您需要引入 WebDriverWait ,并且可以使用以下解决方案:

  • XPath

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//button[@class='item item-block item-md']//ion-label[@class='label label-md' and normalize-space()='Live Data']"))).Click();
    

答案 1 :(得分:0)

我正在使用通用的PhantomJSDriver和特定的浏览器驱动程序。

使用ChromeDriver并在正在运行的浏览器中打开网站。我可以通过编程方式单击该按钮,然后转到正确的来源。

此外,我尝试按下的按钮在侧面菜单中,并且不可见。使用了中心的元素之一,使其起作用。

我确定您可以在不打开浏览器的情况下执行此操作,但就目前而言,这将使该功能正常工作。