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

Popular posts from this blog

cakephp - simple blog with croogo -

How to group boxplot outliers in gnuplot -

bash - Performing variable substitution in a string -