2015-07-21 88 views
0

或者如何使用VBA中的集合(或arrayss)。如何使用Selenium的结果集合

这个问题很可能是我自己,但我还找不到答案。

我想通过Selenium-vba网站上的某些页面找到一些数据。 像往常一样,如果有更多要显示,该网站显示“下一个”按钮。当链接被激活时,该按钮有<a href ... >,否则它只是纯文本。

要测试是否有另一个页面我已经找到了使用findElement的方法s ByLinkText,并且有一个链接或者集合是空的。所以这可以通过集合的大小来测试。

此功能到目前为止。

但是,当我尝试使用集合(除了每个循环)进一步的行动,我不能让它来操作。

这是代码:

Dim driver As New SeleniumWrapper.WebDriver 
Dim By As New By, Assert As New Assert, Verify As New Verify, Waiter As New Waiter 
On Error GoTo ende1 

driver.Start "chrome", "http://www.domain.tld/" 

driver.setImplicitWait 5000 

driver.get "//......." 

Set mynext = driver.findElementsByLinkText("Next") 
if mynext.Count >0 Then 
mynext(1).Click    'THIS STATEMENT DOES NOT WORK 
End If 

所以,请帮我避开我的理解问题(这我相信它是)

我怎样才能从集合访问的元素。

我的解决方法到目前为止是执行

driver.findElementByLinkText("Next").Click 

但是这是不专业的,因为它再次执行查询。

+1

这很难说没有看到html结构。你能发布吗?有一些可能性....如果'mynext.Count = 1',那么mynext(0).Click'将起作用,否则在Next有其他潜在元素。此外,框架内的链接? – pathDongle

回答

0

下一步按钮可能在页面完成后异步加载。 这意味着findElementsByLinkText(“Next”)在被调用时不会返回任何元素。 A到处理这种情况的办法是沉默的错误,调整超时和测试返回元素:

Dim driver As New Selenium.ChromeDriver 
driver.Get "https://www.google.co.uk/search?q=selenium" 

Set ele = driver.FindElementByLinkText("Next", Raise:=False, timeout:=1000) 
If Not ele Is Nothing Then 
    ele.Click 
End If 

driver.Quit 

要获取日期的最新版本上面的示例工作: https://github.com/florentbr/SeleniumBasic/releases/latest