Best Python code snippet using playwright-python
fb_page.py
Source:fb_page.py  
...73    async def get_posts(self, full: int = 0, limit: int = 0, as_text: int = 0, include_comments: int = 0) -> List[Post]:74        posts = []75        posts_urls = []76        if self._is_main_page:77            script = [await i.inner_html() for i in await self.page.query_selector_all('script') if78                      'share_fbid' in await i.inner_html()][0]79            posts = [i for i in nested_lookup('story', json.loads(80                re.search(r'{\"define.*\);}\);}\);', script).group().replace(');});});', ''))) if81                     (i.get('url') or i.get('permalink')) and ('/posts/' in i.get('url') or 'permalink' in i.get('url'))82                     and i.get('creation_time')]83            posts_urls: List[str] = sorted([i['url'] for i in posts], key=lambda x: x.split('/')[:-1],84                                           reverse=not self._is_group)85        if not self._is_group:86            start = 087        else:88            if posts_urls:89                start = 1 if len(posts_urls) > 1 else 090            else:91                start = 192        if not full:93            if not self._is_group:94                posts_count = 195            else:96                if posts_urls:97                    posts_count = len(posts_urls)98                else:99                    posts_count = 2100        else:101            posts_count: int = len(await self.page.query_selector_all(self.posts_selector))102        posts_items = []103        for item in range(start, posts_count):104            if limit and item > limit:105                continue106            full_text = ""107            post_html = None108            if not self._is_main_page:109                posts: List[ElementHandle] = await self.page.query_selector_all(self.posts_selector)110            if posts_urls:111                post_url = posts_urls[item]112            else:113                post_url = await posts[item].get_attribute('href')114                if post_url.startswith('/'):115                    post_url = f"https://mbasic.facebook.com{post_url}"116                else:117                    post_url = post_url.replace("m.facebook", "mbasic.facebook")118            await self.open(post_url)119            await self.page.wait_for_selector(self._post_selector)120            post = await self.page.query_selector(self._post_selector)121            if not posts_urls:122                date = await post.query_selector(self._publish_date_selector)123                if date:124                    date = await date.text_content()125            else:126                date = datetime.fromtimestamp(posts[item]['creation_time'])127            profile_name = await post.query_selector(self._author_selector)128            if profile_name:129                profile_name = await profile_name.text_content()130                full_text = f"{profile_name} posted:\n"131            if not as_text:132                post_html = ""133                await self.page.wait_for_selector(self._post_content_selector)134                html_parts = await self.page.query_selector_all(135                    f"{self._post_selector}{self._post_content_selector}") \136                    if not posts_urls else await self.page.query_selector(137                    f"{self._post_selector}{self._post_content_selector}")138                if isinstance(html_parts, list):139                    for part in html_parts:140                        post_html += strip_tags(await part.inner_html())141                else:142                    post_html += strip_tags(await html_parts.inner_html())143                post_html = re.sub(r'href=\"/', 'href=\"https://facebook.com/', post_html, re.M)144                text_obj = await post.query_selector(self._post_text_selector)145                text = await text_obj.text_content()146                title = f"{text[:30]}..."147            else:148                if date:149                    full_text += date150                text_chunks = await post.query_selector_all(self._post_text_selector)151                text = [await i.text_content() for i in text_chunks]152                text = '\n'.join(text) + '\n'153                title = f"{text[:30]}..."154                full_text += text155                attached_link = await post.query_selector(self._attached_link_selector)156                if attached_link:157                    attached_link_href = await attached_link.get_attribute('href')158                    if not attached_link_href.startswith("http"):159                        attached_link_href = "https://facebook.com" + attached_link_href160                    attached_link_text = await attached_link.text_content()161                    if attached_link_text:162                        attached_link_text = f"[{attached_link_text}]"163                    full_text += f"{attached_link_text}({attached_link_href})\n"164                images = await post.query_selector_all(self._image_selector)165                if images:166                    for image in images:167                        full_text += f"{await image.get_attribute('src')}\n"168                videos = await post.query_selector_all(self._video_selector)169                if videos:170                    for video in videos:171                        video_link_href = await video.get_attribute('href')172                        if not video_link_href.startswith("http"):173                            video_link_href = "https://facebook.com" + video_link_href174                        full_text += f"{video_link_href}\n"175                # print(full_text)176            if include_comments:177                # TODO: Fix wrong comments in main site178                comments = await self.page.query_selector_all(self._comments_selector)179                if comments:180                    for comment in comments:181                        comment_content = await comment.query_selector(f"xpath={self._comment_content_selector}")182                        comment_author = await comment.query_selector(f"xpath={self._comment_author_selector}")183                        comment_author_text = await comment_author.text_content()184                        if not as_text:185                            comment_html = strip_tags(await comment_content.inner_html())186                            comment_html = re.sub(r'href=\"/', 'href=\"https://facebook.com/', comment_html, re.M)187                            post_html += f'<br><br>{comment_author_text}: {comment_html}'188                        else:189                            comment_text = await comment.text_content()190                            full_text += f'\n\n{comment_author_text}: {comment_text}'191            if full:192                await random_sleep()...scripts.py
Source:scripts.py  
...16	title = get_text(site_map_category.query_selector(SiteMapLocators.title))17	categories[title] = dict()18	producer_logger.debug(f"Grabbing sub-categories for Category -> {title}")19	# grab sub-categories under title/categories 20	site_map_sections = site_map_category.query_selector_all(SiteMapLocators.site_map_sections)21	for site_map_section in site_map_sections:22		# grab the text for the sub-categories23		site_map_item_title = site_map_section.query_selector(SiteMapLocators.site_map_item_title)24		site_map_item_title = get_text(site_map_item_title)25			26		# grab all hrefs of items under each sub-categories27		site_map_items = site_map_section.query_selector_all(SiteMapLocators.site_map_items)[1:]28		site_map_items_dict = dict()29		30		for site_map_item in site_map_items:31			site_map_items_dict[get_text(site_map_item)] = site_map_item.get_attribute('href')32		33		# add the dict holding the sub-categories and their hrefs34		categories[title][site_map_item_title] = site_map_items_dict35def get_categories() -> Dict:36	''' Categories - Kadin, Erkek, Teen, Cocuk '''37	categories = dict()38	producer_logger.debug("Getting SiteMap Categories")39	# site map category elements40	site_map_categories = page.query_selector_all(SiteMapLocators.site_map_categories)41	producer_logger.debug("SiteMap Categories Found")42	producer_logger.debug("Traversing SiteMap Categories")43	for site_map_category in site_map_categories:44		get_sub_categories(categories, site_map_category)45	return categories46def traverse_sitemap() -> None:47	sitemap_url: str = f"{base_url}/tr/sitemap"48	# traverse the sitemap url49	producer_logger.info(f"Going to {sitemap_url}")50	page.goto(sitemap_url)51	categories = get_categories()52	return categories53def get_products_href(count: int = 0) -> None:54	# while True:55	products = page.query_selector_all('li[id*="product-key-id"]')56	current_number_of_products = len(products)57	# if count < current_number_of_products:58	for product in products[count:10]:59		product.scroll_into_view_if_needed()60		href = product.query_selector('a').get_attribute('href')61		products_hrefs.add(href)62		producer_logger.debug(f"Found -> {href}")63		count += 164	# else:65	# 	break66	# wait some seconds for product list to update67	sleep()68def set_category(category: str, product: Dict) -> None:69	producer_logger.debug(category)70	product['Category'] = category71def set_sub_category(subcategory: str, product: Dict) -> None:72	producer_logger.debug(subcategory)73	product['Sub Category'] = subcategory74def get_name(product: Dict) -> None:75	# product name76	product_name = get_text(page.wait_for_selector(ProductPageLocators.product_name))77	producer_logger.debug(product_name)78	product['Name'] = product_name79def join_collection(collection: Any) -> str:80	''' helper function '''81	if isinstance(collection, dict):82		return '\n\n'.join([f"{key}:{collection.get(key)}" for key in collection ])83	elif isinstance(collection, list):84		return '\n\n'.join(collection)85def get_description(product: Dict) -> None:86	# description87	product_info_block = page.query_selector_all('div.product-info-block')88	description = dict()89	for block in product_info_block:90		product_info_title = get_text(block.query_selector('h2.product-info-title')) 91		product_info_text = get_text(block.query_selector('p.product-info-text'))  92		description[product_info_title] = product_info_text93	producer_logger.debug(description)94	product['Description'] = join_collection(description)95def get_colors(product: Dict) -> None:96	# color option97	product_colors = page.query_selector(ProductPageLocators.product_colors)98	colors_info = product_colors.query_selector_all(ProductPageLocators.colors_info)99	colors_img = product_colors.query_selector_all(ProductPageLocators.colors_img)100	color_option = { get_text(key): value.get_attribute('src') for key, value in zip(colors_info, colors_img) } 101	producer_logger.debug(color_option)102	product['Color'] = join_collection(color_option)103def get_size(product: Dict) -> None:104	# size option105	size_options = page.query_selector_all(ProductPageLocators.size_options)106	# size_option = [ {get_text(size): size.get_attribute('data-value')} for size in size_options ]107	size_option = [ f"{get_text(size)}:{size.get_attribute('data-value')}" for size in size_options ]108	producer_logger.debug(size_option)109	product['Size'] = join_collection(size_option)110def get_prices(product: Dict) -> None:111	product_prices = page.query_selector(ProductPageLocators.product_prices)112	113	sale_price = get_text(product_prices.query_selector(ProductPageLocators.product_sale))114	product['Sale Price'] = sale_price115	sale_percentage = get_text(product_prices.query_selector('span.product-discount')) 116	product['Sale Percentage'] = sale_percentage117	original_price = get_text(product_prices.query_selector('span.product-sale--cross'))118	product['Original Price'] = original_price119def get_sku(product: Dict) -> None:120	# product SKU121	product_sku = get_text(page.query_selector(ProductPageLocators.product_sku))122	producer_logger.debug(product_sku) 123	product['SKU'] = product_sku124def get_seo(product: Dict) -> None:125	# SEO126	seo = page.query_selector(ProductPageLocators.seo).get_attribute('content').strip()127	producer_logger.debug(seo)128	product['SEO'] = seo129def get_images(product: Dict) -> None:130	# product images131	images = page.query_selector_all(ProductPageLocators.images)132	product_images = [ f"https:{image.get_attribute('src')}" for image in images ]133	producer_logger.debug(product_images)134	product['Images'] = join_collection(product_images)135def get_tags(product: Dict) -> None:136	# product tags137	tag_elements = page.query_selector_all(ProductPageLocators.tag_elements)138	product_tags = [ get_text(tag) for tag in tag_elements ] 139	producer_logger.debug(product_tags)140	product["Tags"] = join_collection(product_tags)141def get_product(url: str) -> None:142	product = dict()143	product_url = f"{base_url}{url}"144	page.goto(product_url)145	product['Product URL'] = product_url146	set_category(category, product)147	set_sub_category(sub_category, product) 148	sleep()149	get_name(product); get_description(product)150	get_colors(product); get_size(product)151	get_prices(product); get_sku(product)...test_honey_integration.py
Source:test_honey_integration.py  
...3    id = input_for_label(page, label)4    return page.fill(f"#{id}", value)5def input_for_label(page, label):6    assert "'" not in label7    labels = page.query_selector_all(f"label:has-text('{label}')")8    assert len(labels) == 19    return labels[0].get_attribute("for")10def labeled_input_value(page, label):11    id = input_for_label(page, label)12    return page.input_value(f"#{id}")13def errors(page):14    return [elt.inner_text() for elt in page.query_selector_all(".errormsg")]15def nav(meth, *args, **kwargs):16    __tracebackhide__ = True17    with meth.__self__.expect_response("*") as response_info:18        meth(*args, **kwargs)19    response = response_info.value20    assert response.status == 200, f"{response.request.method} {response.url} returned {response.status}"21@pytest.fixture(autouse=True)22def fail_faster(page):23    page.set_default_timeout(5000)24PREVIEW = "Preview >>"25ADD_IT = "Add it >>"26BLOG_POST = "/blog/200203/my_first_job_ever.html"27@pytest.mark.parametrize("url, title", [28    ("/blog/202108/me_on_bug_hunters_caf.html", "Me on Bug Hunters Café"),29    ("/blog/200203/my_first_job_ever.html", "My first job ever"),30])31def test_blog_post(page, url, title):32    nav(page.goto, url)33    assert page.inner_text("h1") == title34    assert page.title() == f"{title} | Ned Batchelder"35    # No errors on the page.36    assert errors(page) == []37    # No previewed comment.38    assert page.query_selector_all(".comment.preview") == []39    # There is a preview button, but no Add It button.40    assert len(page.query_selector_all(f"input:has-text('{PREVIEW}')")) == 141    assert len(page.query_selector_all(f"input:has-text('{ADD_IT}')")) == 042def test_previewing(page):43    # Load the page and fill in the comment form.44    nav(page.goto, BLOG_POST)45    assert len(page.query_selector_all(".comment.preview")) == 046    fill_labeled_input(page, "Name:", "Thomas Edison")47    fill_labeled_input(page, "Email:", "tom@edison.org")48    fill_labeled_input(page, "Comment:", "This is a great blog post!")49    # Click "preview", the page has a preview, and filled in fields.50    nav(page.click, f"input:has-text('{PREVIEW}')")51    assert errors(page) == []52    assert len(page.query_selector_all(".comment.preview")) == 153    assert page.query_selector(".comment.preview .who").inner_text() == "Thomas Edison"54    assert page.query_selector(".comment.preview .commenttext").inner_text() == "This is a great blog post!"55    assert labeled_input_value(page, "Name:") == "Thomas Edison"56    assert labeled_input_value(page, "Email:") == "tom@edison.org"57    assert labeled_input_value(page, "Comment:") == "This is a great blog post!"58    assert len(page.query_selector_all(f"input:has-text('{PREVIEW}')")) == 159    assert len(page.query_selector_all(f"input:has-text('{ADD_IT}')")) == 160    # Reload the page, it has no preview, but the simple fields are filled in.61    nav(page.goto, BLOG_POST)62    assert len(page.query_selector_all(".comment.preview")) == 063    assert labeled_input_value(page, "Name:") == "Thomas Edison"64    assert labeled_input_value(page, "Email:") == "tom@edison.org"65    assert labeled_input_value(page, "Comment:") == ""66NAME_MSG = "You must provide a name."67EMWB_MSG = "You must provide either an email or a website."68COMM_MSG = "You didn't write a comment!"69@pytest.mark.parametrize("name, email, website, comment, msgs", [70    (False, False, False, True, [NAME_MSG, EMWB_MSG]),71    (True, False, False, True, [EMWB_MSG]),72    (False, True, False, True, [NAME_MSG]),73    (True, True, False, False, [COMM_MSG]),74    (True, False, True, False, [COMM_MSG]),75    (True, False, False, False, [EMWB_MSG, COMM_MSG]),76])77def test_missing_info(page, name, email, website, comment, msgs):78    # Load the page and fill in the comment form.79    nav(page.goto, BLOG_POST)80    if name:81        fill_labeled_input(page, "Name:", " Thomas Edison")82    if email:83        fill_labeled_input(page, "Email:", "tom@edison.org ")84    if website:85        fill_labeled_input(page, "Web site:", " https://edison.org    ")86    if comment:87        fill_labeled_input(page, "Comment:", "This is a great blog post!")88    # Click "preview", the page has errors and no preview.89    nav(page.click, f"input:has-text('{PREVIEW}')")90    assert errors(page) == msgs91    assert len(page.query_selector_all(".comment.preview")) == 092    assert labeled_input_value(page, "Comment:") == ("This is a great blog post!" if comment else "")93    assert labeled_input_value(page, "Name:") == ("Thomas Edison" if name else "")94    assert labeled_input_value(page, "Email:") == ("tom@edison.org" if email else "")95    assert labeled_input_value(page, "Web site:") == ("https://edison.org" if website else "")96    assert len(page.query_selector_all(f"input:has-text('{PREVIEW}')")) == 1...test_todo.py
Source:test_todo.py  
...41    page.goto("http://localhost:8000/")42    page.fill("#title", "Task title")43    page.fill("#dueDate", "2021-10-20")44    page.click("#addTaskBtn")45    all_rows = page.query_selector_all("table[id='taskList'] > tbody > tr")46    new_row = all_rows[-1]47    assert len(all_rows) == 148    assert new_row.query_selector_all("td")[1].inner_text() == "Task title"49    assert new_row.query_selector_all("td")[2].inner_text() == "Aardvark"50    assert new_row.query_selector_all("td")[3].inner_text() == "Low"51    assert new_row.query_selector_all("td")[4].inner_text() == "2021-10-20"52@pytest.mark.parametrize(53    "worker",54    [55        "Aardvark",56        "Beaver",57        "Cheetah",58        "Dolphin",59        "Elephant",60        "Flamingo",61        "Giraffe",62        "Hippo",63    ],64)65def test_select_worker(page: Page, worker):66    page.goto("http://localhost:8000/")67    page.fill("#title", "Task title")68    page.fill("#dueDate", "2021-10-20")69    page.select_option("#assignedTo", worker)70    page.click("#addTaskBtn")71    new_row = page.query_selector_all("table[id='taskList'] > tbody > tr")[-1]72    assert new_row.query_selector_all("td")[2].inner_text() == worker73@pytest.mark.parametrize("priority", ["Low", "Normal", "Important", "Critical"])74def test_select_priority(page: Page, priority):75    page.goto("http://localhost:8000/")76    page.fill("#title", "Task title")77    page.fill("#dueDate", "2021-10-20")78    page.select_option("#priority", priority)79    page.click("#addTaskBtn")80    new_row = page.query_selector_all("table[id='taskList'] > tbody > tr")[-1]81    assert new_row.query_selector_all("td")[3].inner_text() == priority82    assert priority.lower() in new_row.get_attribute("class")83def test_remove_row(page: Page):84    page.goto("http://localhost:8000/")85    page.fill("#title", "Task title")86    page.fill("#dueDate", "2021-10-20")87    page.click("#addTaskBtn")88    all_rows = page.query_selector_all("table[id='taskList'] > tbody > tr")89    assert len(all_rows) == 190    page.check("table[id='taskList'] > tbody > tr > td > input[type='checkbox']")91    sleep(3)92    all_rows = page.query_selector_all("table[id='taskList'] > tbody > tr")93    assert len(all_rows) == 094if __name__ == "__main__":...LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
