我试图循环打开基于link_text
找到的URL。以下是我尝试使用的程序。
实际上,发生了什么,实际上在该页面上我有3次详细信息,有时是4次(动态)。
更新的代码:
from selenium.webdriver.support import ui
import time
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import NoSuchElementException
from selenium import webdriver
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(chrome_options=options, executable_path='C:\chromedriver_win32\chromedriver.exe')
driver.maximize_window()
driver.get("https://xxxxxx/blogs/")
if driver.find_element_by_xpath("(//span[@class='ui-datepicker-month'][contains(.,'May')])[1]"):
# get the number of details to click
addr = driver.find_elements_by_link_text('Details')
urls = [v.get_attribute("href") for v in addr]
for x in range(1, len(urls) + 1):
driver.execute_script("window.open();")
driver.switch_to.window(driver.window_handles[x])
driver.get(urls[x - 1])`
输出为:
它可以正常工作,请在新标签页中打开所有详细信息href。
更新2:
按照Dmitri T代码,现在它可以在新选项卡中打开所有详细信息href :)感谢您的帮助。我想尝试的最后一个方法是在datepicker循环中,我将5月份的日期硬编码为//span[@class='ui-datepicker-month'][contains(.,'May')])[1]"
。我该如何循环浏览,即点击每天的平均值。单击5月1日,在每个新选项卡中打开所有“详细信息” href,再次转到主网址,单击5月2日,执行相同的操作...在新选项卡中打开所有“详细信息” href ...依此类推。正在尝试编写代码...让您知道结果。谢谢专家。
答案 0 :(得分:1)
addr
list的URL 假设以上提示,您需要修改以下代码:
addr = driver.find_elements_by_link_text('Details')
urls = [v.get_attribute("href") for v in addr]
for x in range(1, len(urls) + 1):
driver.execute_script("window.open();")
driver.switch_to.window(driver.window_handles[x])
driver.get(urls[x - 1])
您可能还需要考虑重新实现使用Page Object pattern的测试-这样,如果您将测试逻辑与UI部分分开,则维护起来会更容易。
答案 1 :(得分:1)
您应该能够使用以下逻辑在新标签中打开所有详细信息链接。
driver.get("https://xxxxxx/blogs/")
if driver.find_element_by_xpath("(//span[@class='ui-datepicker-month'][contains(.,'May')])[1]"):
main_window = driver.current_window_handle
# get the number of details to click
addr = len(driver.find_elements_by_xpath("//a[@class='details'][contains(.,'Details')]"))
# iterate through all the details links (used the index rather elements list as it may lead to staleeleemnt exception after clicking on the first detiails link)
for addrNum in range(addr):
# get the details element based on index
ele = driver.find_element_by_xpath("(//a[@class='details'][contains(.,'Details')])[" + str (addrNum+1) + "]")
# get the href of the link
href = ele.get_attribute('href')
# open the href in another tab
driver.execute_script("window.open('" + href +"');")
# switching to parent window (on safer side)
driver.switch_to.window(main_window)