我是一个有用的助手,可以为您翻译文本。
我正在尝试在此网站上进行一些自动化测试,并以编程方式切换国家。由于每个国家的价格不同,因此我正在编写一个小工具来帮助我决定从哪里购买。
首先,我通过执行以下操作将所有货币存入列表中:
例如,它返回:
当我将a.text与text进行比较时,出现了StaleElementReferenceException异常。我在网上阅读到这意味着当我保存它时对象已经发生了变化,而简单的解决方案是再次调用该函数。然而,我不喜欢这个解决方案和这段代码,我认为它不够有效并且需要太多时间,你有什么想法吗?
我正在尝试在此网站上进行一些自动化测试,并以编程方式切换国家。由于每个国家的价格不同,因此我正在编写一个小工具来帮助我决定从哪里购买。
首先,我通过执行以下操作将所有货币存入列表中:
def get_all_countries():
one = WebDriverWait(driver1, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "selected-currency")))
one.click()
el = WebDriverWait(driver1, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, "site-selector-list")))
list_return = []
a_tags = el.find_elements_by_tag_name('a')
for a in a_tags:
list_return.append(a.text)
return list_return
例如,它返回:
['United Kingdom', 'United States', 'France', 'Deutschland', 'España', 'Australia', 'Россия']
,然后我遍历列表并每次调用此函数:def set_country(text):
is_change_currency_displayed = driver1.find_element_by_id("siteSelectorList").is_displayed()
if not is_change_currency_displayed: # get_all_countries function leaves dropdown open. Check if it is open before clicking it.
one = WebDriverWait(driver1, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "selected-currency")))
one.click()
div = WebDriverWait(driver1, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, "site-selector-list")))
a_tags = div.find_elements_by_tag_name('a')
for a in a_tags:
try:
if a.text == text:
driver1.get(a.get_attribute("href"))
except StaleElementReferenceException:
set_country(text)
当我将a.text与text进行比较时,出现了StaleElementReferenceException异常。我在网上阅读到这意味着当我保存它时对象已经发生了变化,而简单的解决方案是再次调用该函数。然而,我不喜欢这个解决方案和这段代码,我认为它不够有效并且需要太多时间,你有什么想法吗?
def main(url):
driver1.get(url)
to_return_string = ''
one = WebDriverWait(driver1, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "selected-currency")))
one.click()
el = WebDriverWait(driver1, 10).until(EC.visibility_of_element_located((By.CLASS_NAME, "site-selector-list")))
a_tags = el.find_elements_by_tag_name('a')
for a in a_tags:
atext = a.text
ahref = a.get_attribute('href')
try:
is_change_currency_displayed = driver1.find_element_by_id("siteSelectorList").is_displayed()
if not is_change_currency_displayed: # get_all_countries function leaves dropdown open.
one = WebDriverWait(driver1, 10).until(EC.element_to_be_clickable((By.CLASS_NAME, "selected-currency")))
one.click()
driver1.get(ahref)
current_price = WebDriverWait(driver1, 10).until(
EC.visibility_of_element_located((By.CSS_SELECTOR, ".current-price")))
to_return_string += ("In " + atext + " : " + current_price.text + ' \n')
print("In", atext, ":", current_price.text)
except TimeoutException:
print("In", atext, ":", "Timed out waiting for page to load")
to_return_string += ("In " + atext + " : " + " Timed out waiting for page to load" + ' \n')
return to_return_string
main('http://us.asos.com/asos//prd/7011279')