javascript - Executing a script in selenium python -
i trying execute script in selenium.
<div class="vbseo_liked"> <a href="http://www.jamiiforums.com/member.php?u=8355" rel="nofollow">nyaralego</a> , <a href="http://www.jamiiforums.com/member.php?u=8870" rel="nofollow">sikonge</a> , <a href="http://www.jamiiforums.com/member.php?u=8979" rel="nofollow">ab-titchaz</a> , <a onclick="return vbseoui.others_click(this)" href="http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html#">11 others</a> this. </div> this code execute it.
browser.execute_script("document.getelement(by.xpath(\"//div[@class='vbseo_liked']/a[contains(@onclick, 'return vbseoui.others_click(this)')]\").click()") it didn't work. doing wrong?
find element selenium , pass execute_script() click:
link = browser.find_element_by_xpath('//div[@class="vbseo_liked"]/a[contains(@onclick, "return vbseoui.others_click(this)")]') browser.execute_script('arguments[0].click();', link) since know context of problem, here set of things solve it:
- click on "11 others" link via javascript relying on solution provided here: how simulate click javascript?
make custom expected condition wait element text not ends "11 others this." text (this solution problem had @ expected conditions selenium):
class wait_for_text_not_to_end_with(object): def __init__(self, locator, text): self.locator = locator self.text = text def __call__(self, driver): try : element_text = ec._find_element(driver, self.locator).text.strip() return not element_text.endswith(self.text) except staleelementreferenceexception: return false
implementation:
from selenium import webdriver selenium.common.exceptions import staleelementreferenceexception selenium.webdriver.common.by import selenium.webdriver.support.ui import webdriverwait selenium.webdriver.support import expected_conditions ec class wait_for_text_not_to_end_with(object): def __init__(self, locator, text): self.locator = locator self.text = text def __call__(self, driver): try : element_text = ec._find_element(driver, self.locator).text.strip() return not element_text.endswith(self.text) except staleelementreferenceexception: return false browser = webdriver.phantomjs() browser.maximize_window() browser.get("http://www.jamiiforums.com/kenyan-news/225589-kenyan-and-tanzanian-surburbs.html") username = browser.find_element_by_id("navbar_username") password = browser.find_element_by_name("vb_login_password_hint") username.send_keys("mariop") password.send_keys("codeswitching") browser.find_element_by_class_name("loginbutton").click() wait = webdriverwait(browser, 30) wait.until(ec.visibility_of_element_located((by.xpath, '//h2[contains(., "redirecting")]'))) wait.until(ec.title_contains('kenyan & tanzanian')) wait.until(ec.visibility_of_element_located((by.id, 'postlist'))) # click "11 others" link link = browser.find_element_by_xpath('//div[@class="vbseo_liked"]/a[contains(@onclick, "return vbseoui.others_click(this)")]') link.click() browser.execute_script(""" function eventfire(el, etype){ if (el.fireevent) { el.fireevent('on' + etype); } else { var evobj = document.createevent('events'); evobj.initevent(etype, true, false); el.dispatchevent(evobj); } } eventfire(arguments[0], "click"); """, link) # wait "div" not end "11 others link this." wait.until(wait_for_text_not_to_end_with((by.class_name, 'vbseo_liked'), "11 others this.")) print 'success!!' browser.close()
Comments
Post a Comment